# 实现命令行版本的学生管理系统
import os.path
import sys

# 列表的每个元素是一个元组,
students = []

def save():
    """
    用于存档
    """
    with open('D:\PythonProject/record.txt','w',encoding='utf8') as f:
        for i in students:
            f.write(f"{i['student_id']}\t{i['student_name']}\t{i['student_gender']}\t{i['student_class']}\n")
        print(f'存档成功,共存档了{len(students)}条记录')

def load():
    """
    用于读档
    """
    # 如果存档文件不存在,则直接跳过读档流程
    # 避免读方式打开文件时 文件不存在引起异常
    if not os.path.exists('D:\PythonProject/record.txt'):
        return
    global students
    students=[] # 读档时保证把旧的数据清理干净
    with open('D:\PythonProject/record.txt','r',encoding='utf8') as f:
        for line in f:
            # 针对这一行数据按\t进行切分
            # 切分之前,去除末尾的换行
            line=line.strip() # 去掉一个字符串开头和结尾的空白符
            tokens=line.split('\t')
            if len(tokens)!=4:
                print(f'当前行格式存在问题 line={line}')
                continue
            student={
                'student_id':tokens[0],
                'student_name':tokens[1],
                'student_gender':tokens[2],
                'student_class':tokens[3]
            }
            students.append(student)
    print(f'读档成功,共读取了{len(students)}条数据')

def menu():
    print(' 1. 新增学生')
    print(' 2. 显示学生')
    print(' 3. 查找学生')
    print(' 4. 删除学生')
    print(' 0. 退出程序')
    choice=input('请输入你的选择:')
    return choice

def insert():
    print('新增学生开始')
    student_id = input('请输入学生的学号:')
    student_name = input('请输入学生的姓名:')
    student_gender = input('请输入学生的性别:')
    if student_gender not in ('男', '女'):
        print('输入内容不符合要求,新增失败')
        return
    student_class = input('请输入学生的班级:')
    # 使用一个字典将他们整合起来
    student={
        'student_id':student_id,
        'student_name':student_name,
        'student_gender':student_gender,
        'student_class':student_class
    }
    global students
    students.append(student)
    show()
    save()
    print('新增学生完毕')

def show():
    # 遍历全局变量students这个列表,将每个学生的信息打印出来
    print('显示学生开始')
    for i in students:
        print(f"学号:{i['student_id']},姓名:{i['student_name']},性别:{i['student_gender']},班级:{i['student_class']}")
    print(f'共打印了{len(students)}条数据')
    print('显示学生结束')


def find():
    # 根据学生姓名来进行查找
    print('查找学生开始')
    count=0
    name=input('请输入要查找学生的姓名:')
    for i in students:
        if i['student_name']==name:
            print(f"学号:{i['student_id']},姓名:{i['student_name']},性别:{i['student_gender']},班级:{i['student_class']}")
            count+=1
    print(f'共找到了{count}个符合的学生')
    print('查找学生结束')

def delete():
    print('删除学生开始')
    # 按照学号来删除
    id=input('请输入要删除学生的学号:')
    for i in students:
        if i['student_id']==id:
            print(f"删除{i['student_name']}同学的信息")
            students.remove(i)
    save()
    print('删除学生结束')


def main():
    """
    入口函数
    :return:
    """
    print('-----------------------------')
    print('-------欢迎来到学生管理系统------')
    print('-----------------------------')
    load()
    while(True):
        choice=menu()
        if choice=='1':
            insert()
        elif choice=='2':
            show()
        elif choice=='3':
            find()
        elif choice=='4':
            delete()
        elif choice=='0':
            print('good bye')
            sys.exit(0)
        else:
            print('输入有误,请重新输入')

main()